﻿// Decompiled with JetBrains decompiler
// Type: Microsoft.InfoCards.RequestSecurityTokenForGetBrowserToken
// Assembly: infocard, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// MVID: 8E14765A-6610-409A-BA36-099A0642905D
// Assembly location: E:\git\ALLIDA\windll\infocard.exe

using Microsoft.InfoCards.Diagnostics;
using System.Xml;

namespace Microsoft.InfoCards
{
  internal class RequestSecurityTokenForGetBrowserToken : RequestSecurityToken
  {
    public RequestSecurityTokenForGetBrowserToken(RequestSecurityTokenParameters rstParams)
      : base(rstParams)
    {
    }

    protected override void WriteKeyTypeElement()
    {
      InfoCardTrace.Assert(this.ProtocolVersionProfile.WSTrust.KeyTypeBearer.ToString() == this.Policy.GetKeyTypeString(), "Only no proof key allowed in browser case");
      this.Serializer.WriteKeyTypeElement(this.Policy.GetKeyTypeString());
    }

    protected override void WriteRequestTypeElement()
    {
      this.Serializer.WriteRequestTypeElement(this.ProtocolVersionProfile.WSTrust.IssueRequestType);
    }

    protected override void WriteAppliesToElement()
    {
      GetBrowserTokenRequest.WriteSourceUrlAppliesTo((XmlWriter) this.Writer, this.m_rstParams.BrowserTokenParams, this.ProtocolVersionProfile);
    }

    protected override void WriteSecondaryParametersElement()
    {
      if (XmlNames.WSSpecificationVersion.WSTrustOasis2007 != this.ProtocolVersionProfile.WSTrust.Version)
        return;
      bool flag = true;
      if (this.Policy.OptionalClaims.Length > 0)
        flag = this.m_rstParams.DiscloseOptionalClaims;
      if (!flag)
        return;
      if (this.Policy.RelyingPartyPolicy != null)
        this.Serializer.WriteSecondaryParametersElement(this.Policy.RelyingPartyPolicy.PolicyXml);
      else
        this.Serializer.WriteSecondaryParametersElement(this.Policy.ClientPolicy.PolicyXml);
    }

    protected override void CustomWriteBodyContents(XmlDictionaryWriter writer)
    {
      this.InitializeWriters(writer);
      this.WriteRSTOpeningElement();
      this.WriteKeyTypeElement();
      this.WriteRequestTypeElement();
      this.WriteAppliesToElement();
      this.WriteClaimsElement();
      this.WriteTokenTypeElement();
      this.WriteSecondaryParametersElement();
      this.WriteEndElement();
    }
  }
}
